#include<iostream>
using namespace std;
#define ll long long
ll w[1000005];
ll a[200005];
ll bj[1000000];
void pushup(const int u){
    w[u]=w[u*2]+w[u*2+1];
}
void maketag(ll u,ll len,ll x){
    bj[u]+=x;
    w[u]+=len*x;
}
void pushdown(int u,int L,int R){
    
    ll mid=(L+R)>>1;
    maketag(u*2,mid-L+1,bj[u]);
    maketag(u*2+1,R-mid,bj[u]);
    bj[u]=0;
}
void build(int u,int l,int r){
    if(l==r){
        w[u]=a[l];
        return;
    }
    int mid=(l+r)>>1;
    build(u*2,l,mid);
    build(u*2+1,mid+1,r);
    pushup(u);
}
bool inrange(int L,int R,int l ,int r){
    return((L>=l)&&(R<=r));
}
bool outrange(int L,int R,int l ,int r){
    return((L>r)||(R<l));
}
ll cx(int u,int L,int R,int l,int r){
    if(inrange(L,R,l,r))return w[u];
    else{
        if(outrange(L,R,l,r)){
            return 0;
        }
        else{
            pushdown(u,L,R);
            int mid=(L+R)>>1;
            return cx(u*2,L,mid,l,r)+cx(u*2+1,mid+1,R,l,r);
        }
    }
}
void xg(int u,int L,int R,int l,int r,ll x){
    if(inrange(L,R,l,r)){
        maketag(u,R-L+1,x);
    }
    else{
        if(outrange(L,R,l,r))return;
        else{
            pushdown(u,L,R);
            int mid=(L+R)>>1;
             xg(u*2,L,mid,l,r,x);
             xg(u*2+1,mid+1,R,l,r,x);
             pushup(u);
        }
    }
}
int main(){
    freopen("1.txt","r",stdin);
    freopen("p3372_20.txt","w",stdout);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    for(int i=1;i<=m;i++){
        int op;
        cin>>op;
        if(op==1){
            ll x,y,k;
            cin>>x>>y>>k;
            xg(1,1,n,x,y,k);
        }
          if(op==2){
            int x,y;
            cin>>x>>y;
            cout<<cx(1,1,n,x,y)<<endl;
        }
    }
    return 0;
}